HEX
Server: Apache/2.4.68 (Debian)
System: Linux as-cs-widget-demo-us-central1 6.1.0-44-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.164-1 (2026-03-09) x86_64
User: root (0)
PHP: 8.2.32
Disabled: NONE
Upload Files
File: /var/www/kevin-demo/wp-content/plugins/wpforms-sendinblue/src/Api/Http/Request.php
<?php

namespace WPFormsSendinblue\Api\Http;

/**
 * Wrapper class for making HTTP requests.
 *
 * @since 1.0.0
 */
class Request {

	/**
	 * User-agent value.
	 *
	 * @since 1.0.0
	 *
	 * @var string
	 */
	const USER_AGENT = 'wpforms-sendinblue/';

	/**
	 * Base URL.
	 *
	 * @since 1.0.0
	 *
	 * @var string
	 */
	private $base_url = '';

	/**
	 * Parameters.
	 *
	 * @since 1.0.0
	 *
	 * @var array
	 */
	private $parameters;

	/**
	 * Request constructor.
	 *
	 * @since 1.0.0
	 *
	 * @param string $base_url Base URL.
	 * @param array  $params   Parameters.
	 */
	public function __construct( $base_url, $params = [] ) {

		$this->base_url   = $base_url;
		$this->parameters = array_merge_recursive( $this->get_default_parameters(), $params );
	}

	/**
	 * Send a GET request.
	 *
	 * @since 1.0.0
	 *
	 * @param string $uri  URI to request.
	 * @param array  $args Arguments for the request.
	 *
	 * @return Response
	 */
	public function get( $uri, $args = [] ): Response {

		$uri = add_query_arg( $args, $uri );

		return $this->request( 'GET', $uri, [] );
	}

	/**
	 * Send a POST request.
	 *
	 * @since 1.0.0
	 *
	 * @param string $uri  URI to request.
	 * @param array  $args Arguments for the request.
	 *
	 * @return Response
	 */
	public function post( $uri, $args = [] ): Response {

		$args = ! empty( $args ) ? [ 'body' => $args ] : [];

		return $this->request( 'POST', $uri, $args );
	}

	/**
	 * Send a PUT request.
	 *
	 * @since 1.0.0
	 *
	 * @param string $uri  URI to request.
	 * @param array  $args Arguments for the request.
	 *
	 * @return Response
	 */
	public function put( $uri, $args = [] ): Response {

		$args = ! empty( $args ) ? [ 'body' => $args ] : [];

		return $this->request( 'PUT', $uri, $args );
	}

	/**
	 * Send a DELETE request.
	 *
	 * @since 1.0.0
	 *
	 * @param string $uri  URI to request.
	 * @param array  $args Arguments for the request.
	 *
	 * @return Response
	 */
	public function delete( $uri, $args = [] ): Response {

		return $this->request( 'DELETE', $uri, $args );
	}


	/**
	 * Send a request based on method (main interface).
	 *
	 * @since 1.0.0
	 *
	 * @param string $method Request method.
	 * @param string $uri    URI to request.
	 * @param array  $args   Options for the request.
	 *
	 * @return Response
	 */
	public function request( $method, $uri, $args ): Response {

		// Prepare URL.
		$url = $this->base_url . $uri;

		// Merge options.
		$options = array_merge_recursive( $this->parameters, $args );

		// Set a request method.
		$options['method'] = $method;

		// Prepare a request body, as API expect it in a JSON format.
		if (
			! empty( $options['headers']['Content-Type'] ) &&
			$options['headers']['Content-Type'] !== 'application/x-www-form-urlencoded' &&
			! empty( $options['body'] )
		) {
			$options['body'] = wp_json_encode( $options['body'] );
		}

		/**
		 * Filter a request options array before it's sent.
		 *
		 * @since 1.0.0
		 *
		 * @param array   $options  Request options.
		 * @param string  $method   Request method.
		 * @param string  $uri      Request URI.
		 * @param Request $instance Instance of Request class.
		 */
		$options = apply_filters( 'wpformssendinblue_api_v3_https_request_request_options', $options, $method, $uri, $this ); // phpcs:ignore WPForms.PHP.ValidateHooks.InvalidHookName

		// Retrieve the raw response from a safe HTTP request.
		$response = wp_safe_remote_request( $url, $options );

		return new Response( $response );
	}

	/**
	 * Retrieve default parameters for request.
	 *
	 * @since 1.0.0
	 *
	 * @return array
	 */
	public function get_default_parameters() {

		/**
		 * Request parameters.
		 *
		 * @since 1.0.0
		 *
		 * @param array   $defaults Request arguments.
		 * @param Request $instance Instance of Request class.
		 */
		return apply_filters(
			'wpformssendinblue_api_v3_http_request_get_default_parameters',
			[
				'method'  => 'GET',
				'timeout' => 5,
				'headers' => [
					'User-Agent' => self::USER_AGENT . WPFORMS_SENDINBLUE_VERSION,
					'Connection' => 'keep-alive',
				],
			],
			$this
		);
	}
}